package proyectoX.src.entidades;

import java.awt.Rectangle;

import javax.swing.ImageIcon;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.armas.BombaFlotante;
import proyectoX.src.armas.Escudo;
import proyectoX.src.armas.laser;

/**
 * Nave más pequeña, rápida y débil que el jugador puede elegir.
 *
 */
public class exploradora extends Principal {

	private BombaFlotante secundario;
	private Escudo habilidad;

	/**
	 * Crea a la nave jugadora con los datos pasados por parámetro.
	 * @param velocidad Velocidad de desplazamiento.
	 * @param ref Imagen a utilizar.
	 * @param nivel Nivel actual.
	 * @param l Arma de láser que le corresponde usar.
	 */
	public exploradora(int velocidad, ImageIcon ref,Nivel nivel,laser l) {
		super(velocidad,ref,nivel,3,l);
		habilidad = new Escudo(nivel);
		secundario = new BombaFlotante(nivel);
	}

	/**
	 * Activa el escudo que lo hace invulnerable por 3 segundos. 
	 */
	protected void activarHabilidadEspecial() {
		if ((!habilidad.getEscudoActivadoActualmente())&&(habilidad.getMuniciones()>0)) {
			if (habilidad.pasoDelay()) {
				habilidad.disparar(this.getLocation());
				habilidad.setMuniciones(habilidad.getMuniciones()-1);
				nivel.actualizarMunicionesHabilidad();
			}
		}
	}

	/**
	 * Suelta una bomba flotante sobre el espacio de juego.
	 */
	protected void dispararArmaSecundaria() {
		secundario.disparar(this.getLocation());
		nivel.actualizarMunicionesArma();
	}

	/**
	 * Dispara el láser que utiliza.
	 */
	protected void dispararArmaPrincipal() {
		laser.disparar(this.getLocation());		
	}

	/**
	 * Devuelve el área de colisión. 
	 * @return Área de colisión. 
	 */
	public Rectangle getBounds() {
		return new Rectangle(this.getX()+3, this.getY()+2, 40, 14); 
	}

	@Override
	/** 
	 * Incrementa la cantidad de municiones de la habilidad especial en la cantidad
	 * pasada por parámetro.
	 * @param c Cantidad a incrementar.
	 */
	public void aumentarMunicionesHabilidad(int c) {
		habilidad.setMuniciones(habilidad.getMuniciones()+c);
	}

	@Override
	/** 
	 * Incrementa la cantidad de municiones del arma secundario en la cantidad
	 * pasada por parámetro.
	 * @param c Cantidad a incrementar.
	 */
	public void aumentarMunicionesArma(int c) {
		secundario.setMuniciones(secundario.getMuniciones()+c);
		
	}

	@Override
	/**
	 * Devuelve la cantidad de municiones de habilidad especial.
	 * @return La cantidad de municiones restantes.
	 */
	public int getMunicionesHabilidad() {
		return habilidad.getMuniciones();
	}

	@Override
	/**
	 * Devuelve la cantidad de municiones de arma secundaria.
	 * @return La cantidad de municiones restantes.
	 */
	public int getMunicionesArma() {
		return secundario.getMuniciones();
	}

}
